package com.artisan.day01;

import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;

import static dev.langchain4j.model.openai.OpenAiChatModelName.GPT_4_O_MINI;

/**
 * AiServices:
 * - Chat memory
 */
public class ServiceWithMemoryExample {

    interface Assistant {

        String chat(String message);
    }

    /**
     * 演示如何使用AI助手进行聊天
     */
    public static void main(String[] args) {
        // 创建一个聊天记忆对象，最多保存10条消息
        ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10);

        // 构建一个聊天语言模型对象，使用OpenAI的GPT-4模型
        ChatLanguageModel model = OpenAiChatModel.builder()
                .apiKey("demo") // 设置API密钥
                .modelName(GPT_4_O_MINI) // 设置模型名称
                .build();

        // 使用构建器模式创建AI助手对象，传入聊天语言模型和聊天记忆
        Assistant assistant = AiServices.builder(Assistant.class)
                .chatLanguageModel(model)
                .chatMemory(chatMemory)
                .build();

        // 发送消息给AI助手，并打印回复
        String answer = assistant.chat("你好.我的名字是小工匠");
        System.out.println(answer); // 你好，小工匠！很高兴认识你。请问有什么我可以帮助你的吗？

        // 再次发送消息给AI助手，并打印回复
        String answerWithName = assistant.chat("请问我叫什么?");
        System.out.println(answerWithName); // 你叫小工匠。请问还有其他想聊的吗？
    }
}
